# This job definition automates the SuperPMI collection process.

# Trigger this job if the JIT-EE GUID changes, which invalidates previous SuperPMI
# collections.
trigger:
  batch: false
  branches:
    include:
    - main
  paths:
    include:
    - src/coreclr/inc/jiteeversionguid.h

# This pipeline is supposed to be run only on merged changes
# and should not be triggerable from a PR.
pr: none

variables:
  - template: /eng/pipelines/common/variables.yml

schedules:
- cron: "0 17 * * 0"
  displayName: Sun at 9:00 AM (UTC-8:00)
  branches:
    include:
    - main
  always: true

extends:
  template:  /eng/pipelines/common/templates/pipeline-with-resources.yml
  parameters:
    stages:
    - stage: Build
      jobs:

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/common/global-build-job.yml
          buildConfig: checked
          platforms:
          - windows_x64
          - linux_x64
          jobParameters:
            testGroup: outerloop
            buildArgs: -s clr+libs+libs.tests -rc $(_BuildConfig) -c Release /p:ArchiveTests=true
            postBuildSteps:
              - template: /eng/pipelines/coreclr/templates/build-native-test-assets-step.yml
              - template: /eng/pipelines/common/upload-artifact-step.yml
                parameters:
                  rootFolder: $(Build.SourcesDirectory)/artifacts/bin
                  includeRootFolder: false
                  archiveType: $(archiveType)
                  archiveExtension: $(archiveExtension)
                  tarCompression: $(tarCompression)
                  artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
              - template: /eng/pipelines/common/upload-artifact-step.yml
                parameters:
                  rootFolder: $(Build.SourcesDirectory)/artifacts/helix
                  includeRootFolder: false
                  archiveType: $(archiveType)
                  archiveExtension: $(archiveExtension)
                  tarCompression: $(tarCompression)
                  artifactName: LibrariesTestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
            extraVariablesTemplates:
              - template: /eng/pipelines/common/templates/runtimes/native-test-assets-variables.yml
                parameters:
                  testGroup: outerloop
            disableComponentGovernance: true # No shipping artifacts produced by this pipeline

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/common/global-build-job.yml
          buildConfig: checked
          platforms:
          - windows_x86
          - windows_arm64
          - osx_arm64
          jobParameters:
            testGroup: outerloop
            buildArgs: -s clr+libs+libs.tests -rc $(_BuildConfig) -c Release /p:ArchiveTests=true
            postBuildSteps:
              # Build CLR assets for x64 as well as the target as we need an x64 mcs
              - template: /eng/pipelines/common/templates/global-build-step.yml
                parameters:
                  buildArgs: -s clr.spmi -c $(_BuildConfig)
                  archParameter: -arch x64
              - template: /eng/pipelines/coreclr/templates/build-native-test-assets-step.yml
              - template: /eng/pipelines/common/upload-artifact-step.yml
                parameters:
                  rootFolder: $(Build.SourcesDirectory)/artifacts/bin
                  includeRootFolder: false
                  archiveType: $(archiveType)
                  archiveExtension: $(archiveExtension)
                  tarCompression: $(tarCompression)
                  artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
              - template: /eng/pipelines/common/upload-artifact-step.yml
                parameters:
                  rootFolder: $(Build.SourcesDirectory)/artifacts/helix
                  includeRootFolder: false
                  archiveType: $(archiveType)
                  archiveExtension: $(archiveExtension)
                  tarCompression: $(tarCompression)
                  artifactName: LibrariesTestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
            extraVariablesTemplates:
              - template: /eng/pipelines/common/templates/runtimes/native-test-assets-variables.yml
                parameters:
                  testGroup: outerloop
            disableComponentGovernance: true # No shipping artifacts produced by this pipeline

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/common/global-build-job.yml
          buildConfig: checked
          platforms:
          - linux_arm
          - linux_arm64
          jobParameters:
            testGroup: outerloop
            buildArgs: -s clr+libs+libs.tests -rc $(_BuildConfig) -c Release /p:ArchiveTests=true
            postBuildSteps:
              # Build CLR assets for x64 as well as the target as we need an x64 mcs
              - template: /eng/pipelines/common/templates/global-build-step.yml
                parameters:
                  buildArgs: -s clr.spmi -c $(_BuildConfig)
                  archParameter: -arch x64
                  container: linux_x64
              - template: /eng/pipelines/coreclr/templates/build-native-test-assets-step.yml
              - template: /eng/pipelines/common/upload-artifact-step.yml
                parameters:
                  rootFolder: $(Build.SourcesDirectory)/artifacts/bin
                  includeRootFolder: false
                  archiveType: $(archiveType)
                  archiveExtension: $(archiveExtension)
                  tarCompression: $(tarCompression)
                  artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
              - template: /eng/pipelines/common/upload-artifact-step.yml
                parameters:
                  rootFolder: $(Build.SourcesDirectory)/artifacts/helix
                  includeRootFolder: false
                  archiveType: $(archiveType)
                  archiveExtension: $(archiveExtension)
                  tarCompression: $(tarCompression)
                  artifactName: LibrariesTestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
            extraVariablesTemplates:
              - template: /eng/pipelines/common/templates/runtimes/native-test-assets-variables.yml
                parameters:
                  testGroup: outerloop
            disableComponentGovernance: true # No shipping artifacts produced by this pipeline

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/common/templates/runtimes/build-test-job.yml
          buildConfig: checked
          platforms:
          - CoreClrTestBuildHost # Either osx_x64 or linux_x64
          jobParameters:
            testGroup: outerloop

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/coreclr/templates/superpmi-collect-job.yml
          buildConfig: checked
          platforms:
          - osx_arm64
          - linux_arm
          - linux_arm64
          - linux_x64
          - windows_x64
          - windows_x86
          - windows_arm64
          helixQueueGroup: ci
          helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
          jobParameters:
            testGroup: outerloop
            liveLibrariesBuildConfig: Release
            collectionType: pmi
            collectionName: libraries

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/coreclr/templates/superpmi-collect-job.yml
          buildConfig: checked
          platforms:
          - osx_arm64
          - linux_arm
          - linux_arm64
          - linux_x64
          - windows_x64
          - windows_x86
          - windows_arm64
          helixQueueGroup: ci
          helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
          jobParameters:
            testGroup: outerloop
            liveLibrariesBuildConfig: Release
            collectionType: crossgen2
            collectionName: libraries

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/coreclr/templates/superpmi-collect-job.yml
          buildConfig: checked
          platforms:
          - osx_arm64
          - linux_arm
          - linux_arm64
          - linux_x64
          - windows_x64
          - windows_x86
          - windows_arm64
          helixQueueGroup: ci
          helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
          jobParameters:
            testGroup: outerloop
            liveLibrariesBuildConfig: Release
            collectionType: run
            collectionName: realworld

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/coreclr/templates/superpmi-collect-job.yml
          buildConfig: checked
          platforms:
          - osx_arm64
          - linux_arm
          - linux_arm64
          - linux_x64
          - windows_x64
          - windows_x86
          - windows_arm64
          helixQueueGroup: ci
          helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
          jobParameters:
            testGroup: outerloop
            liveLibrariesBuildConfig: Release
            collectionType: run
            collectionName: benchmarks

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/coreclr/templates/superpmi-collect-job.yml
          buildConfig: checked
          platforms:
          - osx_arm64
          - linux_arm
          - linux_arm64
          - linux_x64
          - windows_x64
          - windows_x86
          - windows_arm64
          helixQueueGroup: ci
          helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
          jobParameters:
            testGroup: outerloop
            liveLibrariesBuildConfig: Release
            collectionType: run_tiered
            collectionName: benchmarks

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/coreclr/templates/superpmi-collect-job.yml
          buildConfig: checked
          platforms:
          - osx_arm64
          - linux_arm
          - linux_arm64
          - linux_x64
          - windows_x64
          - windows_x86
          - windows_arm64
          helixQueueGroup: ci
          helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
          jobParameters:
            testGroup: outerloop
            liveLibrariesBuildConfig: Release
            collectionType: run_pgo
            collectionName: benchmarks

      #
      # Collection of coreclr test run
      #
      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml
          buildConfig: checked
          platforms:
          - osx_arm64
          - linux_arm
          - linux_arm64
          - linux_x64
          - windows_x64
          - windows_x86
          - windows_arm64
          helixQueueGroup: superpmi
          helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
          jobParameters:
            testGroup: outerloop
            liveLibrariesBuildConfig: Release
            SuperPmiCollect: true
            unifiedArtifactsName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)

      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/coreclr/templates/superpmi-collect-job.yml
          buildConfig: checked
          platforms:
          - linux_arm64
          - linux_x64
          - windows_x64
          - windows_arm64
          helixQueueGroup: ci
          helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
          jobParameters:
            testGroup: outerloop
            liveLibrariesBuildConfig: Release
            collectionType: nativeaot
            collectionName: smoke_tests

      #
      # Collection of libraries test run: normal
      # Libraries Test Run using Release libraries, and Checked CoreCLR
      #
      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/libraries/run-test-job.yml
          buildConfig: Release
          platforms:
          - osx_arm64
          - linux_arm
          - linux_arm64
          - linux_x64
          - windows_x64
          - windows_x86
          - windows_arm64
          helixQueueGroup: superpmi
          helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
          jobParameters:
            testScope: innerloop
            liveRuntimeBuildConfig: Checked
            dependsOnTestBuildConfiguration: Release
            dependsOnTestArchitecture: x64
            scenarios:
            - normal
            SuperPmiCollect: true
            SuperPmiCollectionName: libraries_tests
            unifiedArtifactsName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Checked
            helixArtifactsName: LibrariesTestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Checked
            unifiedBuildConfigOverride: checked

      #
      # Collection of libraries test run: no_tiered_compilation
      # Libraries Test Run using Release libraries, and Checked CoreCLR
      #
      - template: /eng/pipelines/common/platform-matrix.yml
        parameters:
          jobTemplate: /eng/pipelines/libraries/run-test-job.yml
          buildConfig: Release
          platforms:
          - osx_arm64
          - linux_arm
          - linux_arm64
          - linux_x64
          - windows_x64
          - windows_x86
          - windows_arm64
          helixQueueGroup: superpmi
          helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
          jobParameters:
            testScope: innerloop
            liveRuntimeBuildConfig: Checked
            dependsOnTestBuildConfiguration: Release
            dependsOnTestArchitecture: x64
            scenarios:
            - no_tiered_compilation
            SuperPmiCollect: true
            SuperPmiCollectionName: libraries_tests_no_tiered_compilation
            unifiedArtifactsName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Checked
            helixArtifactsName: LibrariesTestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Checked
            unifiedBuildConfigOverride: checked
